iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
0
自我挑戰組

Git學習筆記系列 第 13

Git 小劇場 git stash part 2

  • 分享至 

  • xImage
  •  

之前Day 7 時只有提到將開發到一半的進度利用git stash暫存起來

今天來介紹詳細一點git stach的使用

當在開發時,你的master分支上有一堆開發中的程式

此時有個緊急的問題進來要除錯修改

這時候我們第一時間就會想要從master其中一個commit的版本來做一個分支出來除錯

不過沒有將做一半的部分commit上去的話是無法reset成任何一個commit,也無法切換branch

目前master上與HEAD的差別就是

  • 我們編輯了index.html

  • 新增了dada.json

線圖如下

Imgur

最上面的Uncommitted changes指的就是index.html及data.json的異動

Imgur

這時候我們要將上面的異動加入暫存區域 (stage area)

git add .

加入之後我們就可以存放這些開發到一半的部分了

​$ git stash save "just modify index.html and add dada.json"
Saved working directory and index state On master: just modify index.html and add dada.json
HEAD is now at 8a7738a master keep going

我用的指令是git stash save "message"

你也可以使用git stash

差別在於用save我可以帶我自己要識別stash的message

現在master的線圖就會回到master的HEAD上了

Imgur

列出現在有哪些stash

​$ git stash list

stash@{0}: On master: just modify index.html and add dada.json

還原剛才利用stash指令存放到的部分

​$ git stash apply 
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   data.json

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   index.html

還原後會發現,這些部分沒有如存放前放到暫存區域 (stage area)

如果你希望這些檔案有回到之前的暫存區域 (stage area)內

跟存放前的狀態一樣的話

要加上參數 --index

​$ git stash apply --index
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   data.json
	modified:   index.html

如此一來就跟存放前的狀態一樣了

此外git apply 預設會是抓取最近一次的stash

若要指定特定的stash 要加上 stash名稱

git stash apply stash@{0}

git stash apply與git stash pop的差別是

pop會將取出後的stash移除

apply則會保留

從stash建立分支

當我們儲存stash後的的master或是其他commit有繼續開發,當我們要還原stash的資料時會碰到問題

或是需要解決合併衝突

不過我們可以透過從stash建立分支這個功能讓stash的部分變成一個新的分支

接下來就可以比照之前兩個分支的合併來處理

從stash建立分支語法為

$ git stash branch testchanges
Switched to a new branch "testchanges"

git stash官方文件

Git 工具 - 儲藏 (Stashing)


上一篇
Git指令 git rebase
下一篇
git revert 指令簡介
系列文
Git學習筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言